package ejercicio1calculadorX1X2Cuadratico;

/**El objeto devuelve los resultados en formato Object casteable a duoble
 * en los metodos primerRaiz() y segundaRaiz().
 * En el caso que sean iguales se debe verificar lo devuelto en el metodo
 * parteComplejaPositiva(), si no es null entonces el resultado es complejo
 * de la forma "primerRaiz + parteComplejaPositiva i"
 * 			   "segundaRaiz - parteComplejaPositiva i"
 * */
public class EcuacionesCuadraticas {
	
	public double a;
	public double b;
	public double c;
	
	/**El cliente crea el objeto EcuacionesCuadraticas con las constantes como
	 * parametros
	 * */
	public EcuacionesCuadraticas(double a, double b, double c) {
		super();
		this.a = a;
		this.b = b;
		this.c = c;
	}
	/**devuelve el termino cuadratico real
	 * */
	private double terminoCuadratico(){
		return (b*b)-(4*a*c);
	}
	
	/**devuelve el termino cuadratico complejo
	 * */
	private double terminoCuadraticoComplejo(){
		return -(b*b)+(4*a*c);
	}
	
	/**devuelve raiz cuadrada del termino cuadratico real
	 * */
	private double raizReal(){
		return (Math.sqrt(this.terminoCuadratico()));
	}
	
	/**devuelve la raiz cuadrada del termino cuadratico complejo por i
	 * */
	private double raizCompleja(){
		return (Math.sqrt(this.terminoCuadraticoComplejo()));
	}

	/**devuelve el resultado final de la primer raiz para el 
	 * caso de raices reales
	 **/
	public Object primerRaiz(){
		if (a!=0){
			if (this.terminoCuadratico()<0)return this.parteReal();
			else return ((-b+this.raizReal())/(2*a));
		}
		else return null;//para el caso division por cero
	}
	
	/**devuelve el resultado final de la segunda raiz para el
	 *  caso de raices reales
	 **/
	public Object segundaRaiz(){
		if (a!=0){
			if (this.terminoCuadratico()<0)return this.parteReal();
			else return ((-b-this.raizReal())/(2*a));
		}
		else return null;//para el caso division por cero
	}
	
	/**Devuelve el resultado final de la parte real de la raiz compleja
	 * */
	private double parteReal() {
		return (-b/(2*a));
	}
	
	/**devuelve el resultado de la parte compleja positiva, la negativa 
	 * es trivial por i
	 * */
	public Object parteComplejaPositiva(){
		if (a!=0){
			if (this.terminoCuadratico()<0)return (this.raizCompleja())/(2*a);
			else return null;
		}
		else return null;//caso division por cero
	}
	
}

